using System;
using System.Configuration;
using System.Data;
using System.Text;
using System.Web.UI.WebControls;
using Anthem;
using App_Code;
using Microsoft.ApplicationBlocks.ExceptionManagement;
using Common;

using MinCultura.Sipa.AgentesArtes;
using MinCultura.Sipa.EntidadesArtes; 
using MinCultura.Sipa.DataAccess.EntidadesArtes;
using UsrControls;
using DropDownList = Anthem.DropDownList;
using Label = Anthem.Label;
using RegularExpressionValidator = Anthem.RegularExpressionValidator;
using TextBox = Anthem.TextBox;

namespace web.Controls
{
	/// <summary>
	/// Summary description for AgentesBasicos.
	/// </summary>
	public class EntidadesJuridico : SinicUserControl
	{
		#region - Controles
		protected Label lblENT_OBJETO_SOCIAL;
		protected UsrControls.TextBoxBase txtENT_OBJETO_SOCIAL;
		protected RegularExpressionValidator regENT_OBJETO_SOCIAL;
		protected Label lblENT_NATURALEZA;
		protected DropDownBase dplNATURALEZA;
		protected Label lblENT_ENTIDAD_CARACTER;
		protected Label lblENT_SINO_ENTIDAD;
		protected Label lblENT_DEPENDE;
		protected UsrControls.TextBoxBase txtENT_DEPENDE;
		protected RegularExpressionValidator regENT_DEPENDE;
		protected Label lblENT_NIVEL_ENTIDAD_DEPENDE;
		protected DropDownBase dplNIVEL_ENTIDAD;
		protected Label lblENT_NOMBRE_ENTIDAD_DEPENDE_RED;
		protected UsrControls.TextBoxBase txtENT_NOMBRE_ENTIDAD_DEPENDE_RED;
		protected RegularExpressionValidator regENT_NOMBRE_ENTIDAD_DEPENDE_RED;
		protected Label lblDEPENDE_RED;
		protected DropDownBase dplNIVEL_ENTIDAD_RED;		
		protected DropDownBase dplCARACTER_ENTIDAD;
		protected DropDownBase dplREGIMEN;
		protected DropDownBase dplSUBREGIMEN;
		protected Anthem.RadioButtonList opcTIENE_PERSONERIA_JURIDICA;
		protected Anthem.RadioButtonList opcDEPENDE_ENTIDAD;
		protected Anthem.RadioButtonList opcENTIDAD_DEPENDE_RED;
		protected Anthem.CustomValidator cValObjetoSocial;
		protected Anthem.CustomValidator cValEntidadDepende;
		protected Anthem.CustomValidator cValNombreRed;

		#endregion

		#region - Eventos

		private void Page_Load(object sender, EventArgs e)
		{			
			if (!IsPostBack)
			{
				Manager.Register(this);
				
				regENT_OBJETO_SOCIAL.ValidationExpression = Utilidad.TraerMensaje("regAlfanumericoPuntuacion");
				regENT_OBJETO_SOCIAL.ErrorMessage = Utilidad.TraerMensaje("gmsgCampoAlfanumerico", lblENT_OBJETO_SOCIAL.Text);

				regENT_DEPENDE.ValidationExpression = Utilidad.TraerMensaje("regAlfanumericoPuntuacion");
				regENT_DEPENDE.ErrorMessage = Utilidad.TraerMensaje("gmsgCampoAlfanumerico", lblENT_DEPENDE.Text);

				regENT_NOMBRE_ENTIDAD_DEPENDE_RED.ValidationExpression = Utilidad.TraerMensaje("regAlfanumericoPuntuacion");
				regENT_NOMBRE_ENTIDAD_DEPENDE_RED.ErrorMessage = Utilidad.TraerMensaje("gmsgCampoAlfanumerico", lblENT_NOMBRE_ENTIDAD_DEPENDE_RED.Text);

				//Falta entidad depende
				StringBuilder strDepende = new StringBuilder();
				strDepende.Append(opcDEPENDE_ENTIDAD.ClientID + "_0,");
				strDepende.Append(lblENT_DEPENDE.ClientID + ",");
				strDepende.Append(txtENT_DEPENDE.ClientID + ",");
				strDepende.Append(regENT_DEPENDE.ClientID + ",");
				strDepende.Append(lblENT_NIVEL_ENTIDAD_DEPENDE.ClientID + ",");
				strDepende.Append(dplNIVEL_ENTIDAD.ClientID);
				opcDEPENDE_ENTIDAD.Attributes.Add("OnClick", "return habilitarCamposSINO(" + strDepende.ToString() + ")");


				//Falta entidad depende RED opcENTIDAD_DEPENDE_RED
				StringBuilder strDependeRed = new StringBuilder();
				strDependeRed.Append(opcENTIDAD_DEPENDE_RED.ClientID + "_0,");
				strDependeRed.Append(lblENT_NOMBRE_ENTIDAD_DEPENDE_RED.ClientID + ",");
				strDependeRed.Append(txtENT_NOMBRE_ENTIDAD_DEPENDE_RED.ClientID + ",");
				strDependeRed.Append(regENT_NOMBRE_ENTIDAD_DEPENDE_RED.ClientID + ",");
				strDependeRed.Append(lblDEPENDE_RED.ClientID + ",");
				strDependeRed.Append(dplNIVEL_ENTIDAD_RED.ClientID);
				opcENTIDAD_DEPENDE_RED.Attributes.Add("OnClick", "return habilitarCamposSINO(" + strDependeRed.ToString() + ")");

				//Personeria Juridica Objeto Social
				StringBuilder strPersoneria = new StringBuilder();
				strPersoneria.Append(opcTIENE_PERSONERIA_JURIDICA.ClientID + "_0,");
				strPersoneria.Append(lblENT_OBJETO_SOCIAL.ClientID + ",");
				strPersoneria.Append(txtENT_OBJETO_SOCIAL.ClientID + ",");
				strPersoneria.Append(regENT_OBJETO_SOCIAL.ClientID + ",");
				strPersoneria.Append(lblENT_NATURALEZA.ClientID + ",");
				strPersoneria.Append(dplNATURALEZA.ClientID + ",");
				strPersoneria.Append(lblENT_ENTIDAD_CARACTER.ClientID + ",");
				strPersoneria.Append(lblENT_ENTIDAD_CARACTER.ClientID + ",");
				strPersoneria.Append(dplCARACTER_ENTIDAD.ClientID);
				opcTIENE_PERSONERIA_JURIDICA.Attributes.Add("OnClick", "return habilitarCamposSINO(" + strPersoneria.ToString() + ")");
			}
			MantenerEstadoVisualFormulario();
		}

		private void dplREGIMEN_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (dplREGIMEN.SelectedValue.Length > 0)
				CargarSubRegimen(Convert.ToDecimal(dplREGIMEN.SelectedValue));
		}
		#endregion 

		#region - Metodos 		

		public EntidadNaturalezaJuridicaData ObtenerDatos()
		{
			EntidadNaturalezaJuridicaData objData = new EntidadNaturalezaJuridicaData();
			DataRow fila = objData.NewRow();

			fila[EntidadNaturalezaJuridicaData.ENT_ID_FIELD] = this.Identificador;
			fila[EntidadNaturalezaJuridicaData.ENT_PERSONERIA_JURIDICA_FIELD] = opcTIENE_PERSONERIA_JURIDICA.SelectedValue;

			if (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI)
			{
				fila[EntidadNaturalezaJuridicaData.ENT_OBJETO_SOCIAL_FIELD] = txtENT_OBJETO_SOCIAL.Text;
				fila[EntidadNaturalezaJuridicaData.ENT_NATURALEZA_FIELD] = dplNATURALEZA.SelectedValue;
				fila[EntidadNaturalezaJuridicaData.CAR_ID_FIELD] = dplCARACTER_ENTIDAD.SelectedValue;
			}

			if (opcDEPENDE_ENTIDAD.SelectedValue == Utilidad.SI)
			{
				if (dplNIVEL_ENTIDAD.SelectedValue == "B")
				{
					fila[EntidadNaturalezaJuridicaData.ENT_DEPENDE_FIELD] = DBNull.Value;
					fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_FIELD] = Utilidad.NO;
					fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD] = DBNull.Value;
				}
				else
				{
					fila[EntidadNaturalezaJuridicaData.ENT_DEPENDE_FIELD] = txtENT_DEPENDE.Text;
					fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_FIELD] = opcDEPENDE_ENTIDAD.SelectedValue;
					fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD] = dplNIVEL_ENTIDAD.SelectedValue;
				}
			}
			else
			{
				fila[EntidadNaturalezaJuridicaData.ENT_DEPENDE_FIELD] = DBNull.Value;
				fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_FIELD] = Utilidad.NO;
				fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD] = DBNull.Value;
			}

			fila[EntidadNaturalezaJuridicaData.ENT_OTRO_REGIMEN_FIELD] = dplREGIMEN.SelectedValue;
			fila[EntidadNaturalezaJuridicaData.ENT_OTRO_SUBREGIMEN_FIELD] = dplSUBREGIMEN.SelectedValue;


			if (opcENTIDAD_DEPENDE_RED.SelectedValue == Utilidad.SI)
			{
				if (dplNIVEL_ENTIDAD_RED.SelectedValue == "B")
				{
					fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_DEPENDE_RED_FIELD] = Utilidad.NO;
					fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD] = DBNull.Value;
					fila[EntidadNaturalezaJuridicaData.ENT_NOMBRE_ENTIDAD_DEPENDE_RED_FIELD] = DBNull.Value;
				}
				else
				{
					fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_DEPENDE_RED_FIELD] = opcENTIDAD_DEPENDE_RED.SelectedValue;
					fila[EntidadNaturalezaJuridicaData.ENT_NOMBRE_ENTIDAD_DEPENDE_RED_FIELD] = txtENT_NOMBRE_ENTIDAD_DEPENDE_RED.Text;
					fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD] = dplNIVEL_ENTIDAD_RED.SelectedValue;
				}
			}
			else
			{
				fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_DEPENDE_RED_FIELD] = Utilidad.NO;
				fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD] = DBNull.Value;
				fila[EntidadNaturalezaJuridicaData.ENT_NOMBRE_ENTIDAD_DEPENDE_RED_FIELD] = DBNull.Value;
			}

			objData.addEntidadNaturalezaJuridica(fila);

			return objData;
		}

		public void CreaEntorno(DataRow fila)
		{
			CargarControles();

			this.Identificador = Convert.ToDecimal(fila[EntidadNaturalezaJuridicaData.ENT_ID_FIELD]);
			opcTIENE_PERSONERIA_JURIDICA.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_PERSONERIA_JURIDICA_FIELD].ToString();
			if (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI)
			{
				txtENT_OBJETO_SOCIAL.Text = fila[EntidadNaturalezaJuridicaData.ENT_OBJETO_SOCIAL_FIELD].ToString();
				dplNATURALEZA.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_NATURALEZA_FIELD].ToString();

				if (fila[EntidadNaturalezaJuridicaData.CAR_ID_FIELD] != DBNull.Value && fila[EntidadNaturalezaJuridicaData.CAR_ID_FIELD].ToString().Trim() != "")
					dplCARACTER_ENTIDAD.SelectedValue = fila[EntidadNaturalezaJuridicaData.CAR_ID_FIELD].ToString();

				lblENT_OBJETO_SOCIAL.Enabled = true;
				txtENT_OBJETO_SOCIAL.Enabled = true;
				lblENT_NATURALEZA.Enabled = true;
				dplNATURALEZA.Enabled = true;
				lblENT_ENTIDAD_CARACTER.Enabled = true;
				dplCARACTER_ENTIDAD.Enabled = true;
			}

			txtENT_OBJETO_SOCIAL.Text = fila[EntidadNaturalezaJuridicaData.ENT_OBJETO_SOCIAL_FIELD].ToString();

			dplREGIMEN.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_OTRO_REGIMEN_FIELD].ToString();

			dplSUBREGIMEN.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_OTRO_SUBREGIMEN_FIELD].ToString();

			txtENT_DEPENDE.Text = fila[EntidadNaturalezaJuridicaData.ENT_DEPENDE_FIELD].ToString();

			opcENTIDAD_DEPENDE_RED.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_DEPENDE_RED_FIELD].ToString();
			if (opcENTIDAD_DEPENDE_RED.SelectedValue == Utilidad.SI)
			{
				txtENT_NOMBRE_ENTIDAD_DEPENDE_RED.Text = fila[EntidadNaturalezaJuridicaData.ENT_NOMBRE_ENTIDAD_DEPENDE_RED_FIELD].ToString();
				if (fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD] != DBNull.Value && fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD].ToString() != "")
					dplNIVEL_ENTIDAD_RED.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_RED_FIELD].ToString();
				else
					dplNIVEL_ENTIDAD_RED.SelectedValue = "B";

				lblENT_NOMBRE_ENTIDAD_DEPENDE_RED.Enabled = true;
				txtENT_NOMBRE_ENTIDAD_DEPENDE_RED.Enabled = true;
				lblENT_NIVEL_ENTIDAD_DEPENDE.Enabled = true;
				dplNIVEL_ENTIDAD_RED.Enabled = true;
			}
			else
			{
				dplNIVEL_ENTIDAD_RED.SelectedValue = "B";
			}

			txtENT_NOMBRE_ENTIDAD_DEPENDE_RED.Text = fila[EntidadNaturalezaJuridicaData.ENT_NOMBRE_ENTIDAD_DEPENDE_RED_FIELD].ToString();

			dplNATURALEZA.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_NATURALEZA_FIELD].ToString().ToUpper();

			opcDEPENDE_ENTIDAD.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_SINO_ENTIDAD_FIELD].ToString();
			if (opcDEPENDE_ENTIDAD.SelectedValue == Utilidad.SI)
			{
				txtENT_DEPENDE.Text = fila[EntidadNaturalezaJuridicaData.ENT_DEPENDE_FIELD].ToString();
				if (fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD] != DBNull.Value && fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD].ToString() != "")
					dplNIVEL_ENTIDAD.SelectedValue = fila[EntidadNaturalezaJuridicaData.ENT_NIVEL_ENTIDAD_DEPENDE_FIELD].ToString();
				else
					dplNIVEL_ENTIDAD.SelectedValue = "B";

				lblENT_DEPENDE.Enabled = true;
				txtENT_DEPENDE.Enabled = true;
				lblDEPENDE_RED.Enabled = true;
				dplNIVEL_ENTIDAD.Enabled = true;
			}
			else
			{
				txtENT_DEPENDE.Text = "";
				dplNIVEL_ENTIDAD.SelectedValue = "B";
			}
		}

		public void CargarControles()
		{
			dplREGIMEN.Items.Clear();
            RegimenEntidad objBR = new RegimenEntidad(ConfigurationManager.AppSettings["Conn"]);
			RegimenEntidadData objData = new RegimenEntidadData();
			objData = objBR.BuscarRegimenEntidadPadre();
			if (objData != null)
			{
				dplREGIMEN.DataSource = objData;
				dplREGIMEN.DataTextField = RegimenEntidadData.REG_NOMBRE_FIELD;
				dplREGIMEN.DataValueField = RegimenEntidadData.REG_ID_FIELD;
				dplREGIMEN.DataBind();
			}

			if (dplREGIMEN.SelectedValue.Length > 0)
			{
				CargarSubRegimen(Convert.ToDecimal(dplREGIMEN.SelectedValue));
			}

			dplCARACTER_ENTIDAD.Items.Clear();
            EntidadCaracter objEntidadCaracter = new EntidadCaracter(ConfigurationManager.AppSettings["Conn"]);
			EntidadCaracterData objDataEntidadCaracter = new EntidadCaracterData();
			objDataEntidadCaracter = objEntidadCaracter.BuscarEntidadCaracter();
			if (objDataEntidadCaracter != null)
			{
				dplCARACTER_ENTIDAD.DataSource = objDataEntidadCaracter.Tables[0];
				dplCARACTER_ENTIDAD.DataTextField = EntidadCaracterData.CAR_NOMBRE_FIELD;
				dplCARACTER_ENTIDAD.DataValueField = EntidadCaracterData.CAR_ID_FIELD;
				dplCARACTER_ENTIDAD.DataBind();
			}

			CargarNivelEntidad(dplNIVEL_ENTIDAD);
			CargarNivelEntidad(dplNIVEL_ENTIDAD_RED);
		}

		public void CargarSubRegimen(decimal decID_PADRE)
		{
			dplSUBREGIMEN.Items.Clear();
            RegimenEntidad objBR = new RegimenEntidad(ConfigurationManager.AppSettings["Conn"]);
			RegimenEntidadData objData = new RegimenEntidadData();

			objData = objBR.ConsultarRegimenEntidadPadre(decID_PADRE);
			if (objData != null)
			{
				dplSUBREGIMEN.DataSource = objData;
				dplSUBREGIMEN.DataTextField = RegimenEntidadData.REG_NOMBRE_FIELD;
				dplSUBREGIMEN.DataValueField = RegimenEntidadData.REG_ID_FIELD;
				dplSUBREGIMEN.DataBind();
			}
		}

		private void CargarNivelEntidad(DropDownList dpl)
		{
			dpl.Items.Clear();
            NivelAdministracion objControlNivelAdmin = new NivelAdministracion(ConfigurationManager.AppSettings["Conn"]);
			NivelAdministracionData objDataNivelAdmin;
			objDataNivelAdmin = objControlNivelAdmin.BuscarNivelAdministracion();
			if (objDataNivelAdmin != null)
			{
				dpl.DataSource = objDataNivelAdmin;
				dpl.DataMember = objDataNivelAdmin.Tables[0].TableName;
				dpl.DataTextField = NivelAdministracionData.NIA_NOMBRE_FIELD;
				dpl.DataValueField = NivelAdministracionData.NIA_ID_FIELD;
				dpl.DataBind();				
			}
			dpl.Items.Add(new ListItem("", "B"));
		}

		private void MantenerEstadoVisualFormulario()
		{			
			lblENT_OBJETO_SOCIAL.Enabled = (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI);
			txtENT_OBJETO_SOCIAL.Enabled = (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI);
			lblENT_NATURALEZA.Enabled = (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI);
			dplNATURALEZA.Enabled = (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI);
			lblENT_ENTIDAD_CARACTER.Enabled = (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI);
			dplCARACTER_ENTIDAD.Enabled = (opcTIENE_PERSONERIA_JURIDICA.SelectedValue == Utilidad.SI);
						
			lblENT_NOMBRE_ENTIDAD_DEPENDE_RED.Enabled = (opcENTIDAD_DEPENDE_RED.SelectedValue == Utilidad.SI);
			txtENT_NOMBRE_ENTIDAD_DEPENDE_RED.Enabled = (opcENTIDAD_DEPENDE_RED.SelectedValue == Utilidad.SI);
			lblENT_NIVEL_ENTIDAD_DEPENDE.Enabled = (opcENTIDAD_DEPENDE_RED.SelectedValue == Utilidad.SI);
			dplNIVEL_ENTIDAD_RED.Enabled = (opcENTIDAD_DEPENDE_RED.SelectedValue == Utilidad.SI);
			
			lblENT_DEPENDE.Enabled = (opcDEPENDE_ENTIDAD.SelectedValue == Utilidad.SI);
			txtENT_DEPENDE.Enabled = (opcDEPENDE_ENTIDAD.SelectedValue == Utilidad.SI);
			lblDEPENDE_RED.Enabled = (opcDEPENDE_ENTIDAD.SelectedValue == Utilidad.SI);
			dplNIVEL_ENTIDAD.Enabled = (opcDEPENDE_ENTIDAD.SelectedValue == Utilidad.SI);
		}


		#endregion 

		#region - Propiedades

		public decimal Identificador
		{
			get
			{
				if (ViewState["Identificador"] != null)
					return ((decimal) ViewState["Identificador"]);
				else
					return (0);
			}
			set { ViewState["Identificador"] = decimal.Parse(value.ToString()); }
		}

		public EntidadNaturalezaJuridicaData EntidadNaturalezaJuridicaDataTable
		{
			get
			{
				EntidadNaturalezaJuridicaData dtEntidadNaturalezaJuridicaData = null;

				if (Cache[EntidadNaturalezaJuridicaData.ART_ENTIDAD_NATURALEZA_JURIDICA_TABLE+ Session.SessionID] != null)
				{
					dtEntidadNaturalezaJuridicaData =
						(EntidadNaturalezaJuridicaData) Cache[EntidadNaturalezaJuridicaData.ART_ENTIDAD_NATURALEZA_JURIDICA_TABLE + Session.SessionID];
				}

				return dtEntidadNaturalezaJuridicaData;
			}
		}

		public EntidadNaturalezaJuridicaData NaturalezaJuridicaData
		{
			get 
			{
				return ObtenerDatos();
			}
			set
			{
				if (value != null && value.Rows.Count > 0)
				{
					CreaEntorno(value.Rows[0]);	
				}
			}
		}
		#endregion 

		#region Web Form Designer generated code

		protected override void OnInit(EventArgs e)
		{
			InitializeComponent();
			base.OnInit(e);
		}

		private void InitializeComponent()
		{
			this.dplREGIMEN.SelectedIndexChanged += new System.EventHandler(this.dplREGIMEN_SelectedIndexChanged);
			this.Load += new System.EventHandler(this.Page_Load);

		}

		#endregion



	}
}